05.08 일지
새 Activity(with BottomNavigator) 만들어서 사용하기
Android Studio 이용 → Activity 생성
다양한 템플릿의 Activity 생성이 가능했다. HomeActivity 생성 (with BottomNavigator)
위의 방법을 사용하니 필요한 레이아웃에 대해 필요한 Class, XML파일을 자동으로 생성됐다
HomeActivity.kt
{Item}Fragment.kt
{Item}ViewModel.kt
res/layout/activity_home,fragment_{item}.xml
res/navigation/mobile_navigation.xml
res/menu/bottom_nav_menu.xml
res/drawable/ic_{item}_black_24dp.xml
Fragment에서... onCreateView():View
: Fragment가 만들어질 때 같이 보여줄 View 명시
onCreateView(..): View {
val challengeViewModel
= ViewModelProvider(this).get(ChallengeViewModel::class.java)
}
ViewModelProvider.get()
⇒ Fragment ~ ViewModel 연결
View를 반환하는 방법
inflater.inflate()
⇒ 해당 View를 inflate해서 반환한다.inflate
: 레이아웃 XML파일의 값을 초기화해서 View 오브젝트에 저장하는 과정- binding.root ⇒ 대표 View를 반환한다.
Fragment{Item}Binding
Binding class: 해당 컴포넌트에서 사용하는 연관된 View의 정보가 묶인 것,Binding.ID
로 접근가능
onCreateView()의 인자값 ViewGroup
: 만들어질 View의 부모 View 컴포넌트를 명시해준다 (에디터가 알아서 인자값 입력)
ViewGroup의 종류: LinearLayout, RelativeLayout, FrameLayout, ConstraintLayout, GridLayout 등
BottomNavigator 연관관계
in HomeActivity.kt
: navigator를 쓸 Activity
→ binding.navView
로 바에서 사용될 View를 명시
→ findNavController(ID)
로 사용될 Navigate fragment 명시
→ AppBarConfiguration
에서 사용될 Item들(res/menu/item
) 명시
in res/navigation/mobile_navigation.xml
: navigation을 위한 Fragment
→ app:startDestination="ID"
로 default 화면 명시
→ <fragment />
로 사용할 item들 명시
→ 사용될 Item(res/menu/
) 명시
in res/menu/bottom_nav_menu.xml
: navigation에 들어갈 item들 모임
→ <item />
로 사용할 item들의 디테일(icon, title) 명시
→ res/drawable/
로 사용될 아이콘 명시
in res/drawable/ic_{item}_black_24dp.xml
: item으로 쓰일 아이콘을 그려서 명시해줌
in {Item}Fragment.kt
, {Item}ViewModel.kt
: Navigator으로 이동한 후 보여줄 화면
in res/layout/activity_home,fragment_{item}.xml
: 보여줄 화면의 layout
→ res/navigation/
를 사용함을 명시
BottomNavigator를 만드는 도중 직면한 문제
⇒ IDE가 만든 kt파일의 이름을 수정하면 연관된 xml파일도 같이 수정되도록 refactor를 하고 싶었지만 지원을 안하는 것 같아 수동으로 교체했는데 리팩토링 방법 알아보기
⇒ 들어갈 Item의 icon을 바꾸고 싶은데 material icon이 이름으로 설정돼있는게 아니라 벡터이미지로 그려져 있음.. material.cancel
이런 식으로 접근할 수 없는지 찾아보기